1. Field of the Invention
The present invention relates generally to reading of data from compressed data files, and more specifically to a method and an apparatus for decompressing and reading only a minimum subset of a compressed data file directly into memory.
2. Description of the Background
Compressed data residing in a data file must generally be decompressed in order to be of any real use. However, if access to only a small portion of the data file is needed, it is wasteful of computational resources to decompress the entire file. CPU time is unnecessarily wasted decompressing the file, and storage space is unnecessarily wasted holding the unneeded portions of the decompressed data.
Presently-available data decompressors appear to suffer both these faults. When a program issues an access request to a compressed file, the data decompressor decompresses the entire file and stores the decompressed version for access by the program. While the data decompressor is operating, the program must wait. If the data decompressor cannot allocate storage for the decompressed file, unknown errors may occur or the results may be otherwise unpredictable.
For example, if the compressed data file is on a disk which has less free space than the decompressed version of the file, the data decompressor may be unable to operate.
Additionally, existing data decompressors do not operate at the same level of logical operation at which most computer programs operate. Specifically, while computer programs tend to issue access requests to a certain file (i.e. on a file basis), existing data decompressors tend to operate at the much lower level of an operating system (i.e. on a block basis, disk basis, device driver basis, or the like).
This incompatibility of operational levels imposes certain additional inefficiencies on existing data decompressors. For example, existing data decompressors do not take sufficient advantage of the various read/write permission levels involved in data access requests. If a program opens a file "read only", for example, there is no need to save a permanent copy of the decompressed data, because it will ultimately be discarded when the program closes the file.
What is needed, therefore, is an improved method and apparatus for accessing data files on a file basis, and within the file basis, on the more limited basis of only a requested subset of the data content of a specified file. The improved method and apparatus should have a reduced usage of computational resources, by decompressing only a minimum amount of data. The improved method and apparatus should operate regardless of how much free storage is present on the medium on which the compressed file is stored. The method and apparatus should, additionally, take optimum advantage of access permission levels indicated by programs issuing data access requests.